/**
 * Copyright (c), 2012~2020 iot.10086.cn All Rights Reserved
 *
 * @file main.c
 * @brief
 */

/*****************************************************************************/
/* Includes                                                                  */
/*****************************************************************************/
#include <stdio.h>
#include <time.h>

#include "tm_data.h"
#include "data_types.h"
#include "tm_api.h"
#include "tm_user.h"

/*****************************************************************************/
/* Local Definitions ( Constant and Macro )                                  */
/*****************************************************************************/
/**
 * 用户可在OneNET Studio创建新的产品，导入目录中model-schema.json定义的物模型后，
 * 直接使用SDK内的tm_user.[ch]进行调试，同时还可以从平台导出tm_user.[ch]与SDK
 * 内置的文件进行对比，熟悉物模型功能点的开发方式
*/
#define PRODUCT_ID    
#define DEVICE_NAME   
#define ACCESS_KEY    

/*****************************************************************************/
/* Structures, Enum and Typedefs                                             */
/*****************************************************************************/

/*****************************************************************************/
/* Local Function Prototype                                                  */
/*****************************************************************************/

/*****************************************************************************/
/* Local Variables                                                           */
/*****************************************************************************/

/*****************************************************************************/
/* Global Variables                                                          */
/*****************************************************************************/

/*****************************************************************************/
/* Function Implementation                                                   */
/*****************************************************************************/
int main(int arg, char **argv[])
{
    struct tm_downlink_tbl_t downlink_tbl = {0};
    struct event_alert_t alert = {0};
    int32_t i = 0;

    downlink_tbl.prop_tbl = tm_prop_list;
    downlink_tbl.prop_tbl_size = tm_prop_list_size;
    downlink_tbl.svc_tbl = tm_svc_list;
    downlink_tbl.svc_tbl_size = tm_svc_list_size;

    if(0 == tm_init(&downlink_tbl))
    {
        printf("tm init ok\n");
    }

    if (0 == tm_login(PRODUCT_ID, DEVICE_NAME, ACCESS_KEY, 5000))
    {
        printf("tm api login ok\n");
    }
    else
    {
        return -1;
    }

    while(i < 100)
    {
        if(0 != tm_step(200))
        {
            printf("step failed\n");
            tm_logout(3000);
            break;
        }

        if(0 == i++ % 20)
        {
            tm_prop_float32_notify(NULL, 3.33, 0, 3000);
            tm_prop_int32_notify(NULL, 88, 0, 3000);
            alert.cnt = 10;
            tm_event_alert_notify(NULL, alert, 0, 3000);
        }

        usleep(50000); // 50ms
    }
    tm_logout(3000);

    return 0;
}
